/**
 * 
 */
package br.idez.idezJet.integracao.dao;

import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.idez.idezJet.integracao.vo.Voo;

/**
 * @author Moacir Junior
 *
 */

@Stateless
public class VooDAOImpl implements VooDAO {
	
	@PersistenceContext
	private EntityManager em;
	
	public VooDAOImpl(){
		
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#incluir(java.lang.Object)
	 */
	@Override
	public void incluir(Voo o) throws Exception {
		em.persist(o);
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#alterar(java.lang.Object)
	 */
	@Override
	public void alterar(Voo o) throws Exception {
		em.merge(o);
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#consultar(java.lang.Object)
	 */
	@Override
	public Voo consultar(Voo o) throws Exception {
		return em.find(Voo.class, o.getId());
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#listar()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Collection<Voo> listar() throws Exception {
		Query query = em.createQuery("select v from Voo v");
		return query.getResultList();
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#listar(java.lang.Object)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Collection<Voo> listar(Voo o) throws Exception {
		Query query = em.createQuery("select v from Voo v " +
									"where v.aeroportoOrigem = :aeroportoOrigem and " +
									"v.aeroportoDestino = :aeroportoDestino and " +
									"v.cidadeOrigem = :cidadeOrigem and " +
									"v.cidadeDestino = :cidadeDestino and " +
									"v.horaPartida between :horaPartida AND :horaChegada");
		query.setParameter("aeroportoOrigem", o.getAeroportoOrigem());
		query.setParameter("aeroportoDestino", o.getAeroportoDestino());
		query.setParameter("cidadeOrigem", o.getCidadeOrigem());
		query.setParameter("cidadeDestino", o.getCidadeDestino());
		query.setParameter("horaPartida", o.getHoraPartida());
		query.setParameter("horaChegada", o.getHoraChegada());
	
		return query.getResultList();
	}

	/* (non-Javadoc)
	 * @see br.idez.idezJet.integracao.dao.IdezJetDAO#excluir(java.lang.Object)
	 */
	@Override
	public void excluir(Voo o) throws Exception {
		o = em.merge(o);
		em.remove(o);
	}

}
